#include <SevenSegmentTM1637.h>   //调用SevenSegmentTM1637库文件

SevenSegmentTM1637  display(2,3); //定义数码管的CLK,DIO引脚
volatile int item; //定义变量item

//函数checkdistance_A1_A0，获取实时的测距距离，并返回，单位为厘米
float checkdistance_A1_A0() {
  digitalWrite(A1, LOW);  //引脚A1拉低
  delayMicroseconds(2);   //延时2微秒
  digitalWrite(A1, HIGH); //引脚A1拉高
  delayMicroseconds(10);  //延时10微秒
  digitalWrite(A1, LOW);  //引脚A1拉低
  float distance = pulseIn(A0, HIGH) / 58.00;  //pulseIn用于检测A0引脚高电平持续时间，然后除以58转化为厘米单位的距离值
  delay(10); //延时10毫秒
  return distance; //返回得到的距离值，单位为厘米
}

void setup(){
  display.begin();     //初始化数码管
  item = 0;            //变量item值清零
  pinMode(A1, OUTPUT); //引脚A1配置为输出模式，超声波测距输出口
  pinMode(A0, INPUT);  //引脚A0配置为输入模式，超声波测距输入口
  pinMode(4, OUTPUT);  //引脚4配置为输出模式
}

void loop(){
  item = checkdistance_A1_A0();  //调用函数获取实时测距距离，单位为厘米
  delay(400);  //延时400毫秒
  if (item >= 0 && item <= 80) { //测距距离范围在0-80cm之间，在数码管上显示出来
    display.print(String((item / 10)) + String(((long) (item) % (long) (10)))); //数码管显示实时测距距离

  } else {   //测距距离不在0-80cm之间，在数码管清除显示
    display.clear();

  }
  if (item <= 32) {  //测距距离小于32厘米，引脚4输出高电平，喇叭报警
    digitalWrite(4,HIGH);  //喇叭报警

  } else {    //测距距离大于或等于32厘米，引脚4输出低电平，喇叭清除报警
    digitalWrite(4,LOW);  //喇叭清除报警

  }

}
